import AsyncStorage from "@react-native-async-storage/async-storage";

const BASE_URL = 'http://106.15.34.247:48080/admin-api';
// const BASE_URL = 'http://192.168.31.219:48080/admin-api';
// 统一的请求封装
const request = {
    async get({url, params = {}}: { url: string, params?: any }) {
        const token = await AsyncStorage.getItem('ACCESS_TOKEN');
        const query = new URLSearchParams(params).toString();
        const fullUrl = `${BASE_URL}${url}${query ? `?${query}` : ''}`;

        const response = await fetch(fullUrl, {
            method: 'GET',
            headers: {
                'tenant-id': '1',
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${token}`,
            },
        });

        if (!response.ok) {
            throw new Error(`请求失败: ${response.status}`);
        }
        return response.json();
    },

    async post({url, data}: { url: string, data: any }) {
        const token = await AsyncStorage.getItem('ACCESS_TOKEN');
        const response = await fetch(`${BASE_URL}${url}`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'tenant-id': '1',
                'Authorization': `Bearer ${token}`,
            },
            body: JSON.stringify(data),
        });

        if (!response.ok) {
            throw new Error(`请求失败: ${response.status}`);
        }
        return response.json();
    },

    async put({url, data}: { url: string, data: any }) {
        const token = await AsyncStorage.getItem('ACCESS_TOKEN');
        const response = await fetch(`${BASE_URL}${url}`, {
            method: 'PUT',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${token}`,
            },
            body: JSON.stringify(data),
        });

        if (!response.ok) {
            throw new Error(`请求失败: ${response.status}`);
        }
        return response.json();
    },

    async delete({url}: { url: string }) {
        const token = await AsyncStorage.getItem('ACCESS_TOKEN');
        const response = await fetch(`${BASE_URL}${url}`, {
            method: 'DELETE',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${token}`,
            },
        });

        if (!response.ok) {
            throw new Error(`请求失败: ${response.status}`);
        }
        return response.json();
    },

    async download({url, params = {}}: { url: string, params?: any }) {
        const token = await AsyncStorage.getItem('ACCESS_TOKEN');
        const query = new URLSearchParams(params).toString();
        const fullUrl = `${BASE_URL}${url}${query ? `?${query}` : ''}`;

        const response = await fetch(fullUrl, {
            method: 'GET',
            headers: {
                'Authorization': `Bearer ${token}`,
            },
        });

        if (!response.ok) {
            throw new Error(`下载失败: ${response.status}`);
        }
        return response.blob();
    },
};


export async function login(username: string, password: string, captchaVerification = '', tenantId = '1') {
    const data = {
        username,
        password,
        captchaVerification
    }
    const res = await fetch(`${BASE_URL}/system/auth/login`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'isToken': 'false', // 如需自定义header可加上
            'tenant-id': tenantId, // 新增租户ID
        },
        body: JSON.stringify(data),
    });
    if (!res.ok) throw new Error('网络错误');
    return res.json();
}

export async function getInfo(token: string) {
    const res = await fetch(`${BASE_URL}/system/auth/get-permission-info`, {
        method: 'GET',
        headers: {
            'Authorization': 'Bearer ' + token,
        },
    });
    if (!res.ok) throw new Error('网络错误');
    return res.json();
}

export async function logout(token: string) {
    const res = await fetch(`${BASE_URL}/system/auth/logout`, {
        method: 'POST',
        headers: {
            'Authorization': 'Bearer ' + token,
        },
    });
    if (!res.ok) throw new Error('网络错误');
    return res.json();
}

export interface UserVo {
    id: number; // 用户ID
    username: string; // 用户账号
    nickname: string; // 用户昵称
    remark?: string; // 备注
    dept: { // 部门信息
        id: number;
        name: string;
    };
    postIds?: number[]; // 岗位ID数组
    posts?: Array<{ // 岗位信息
        id: number;
        name: string;
    }>;
    email: string; // 用户邮箱
    mobile: string; // 手机号码
    sex: number; // 用户性别
    sexLabel?: string; // 性别文字描述
    avatar: string; // 用户头像
    status: number; // 帐号状态
    statusLabel?: string; // 状态文字描述
    loginIp?: string; // 最后登录IP
    loginDate?: number; // 最后登录时间(时间戳)
    loginDateStr?: string; // 格式化后的登录时间
    createTime?: number; // 创建时间(时间戳)
    createTimeStr?: string; // 格式化后的创建时间
    roles?: Array<{ // 角色信息
        id: number;
        name: string;
    }>;
    socialUsers?: Array<any>; // 社交用户信息
}

// 新增：人脸识别接口
export async function checkFaceRN(imageUri: string) {
    const token = await AsyncStorage.getItem('ACCESS_TOKEN');
    const formData = new FormData();
    formData.append('name', 'face.jpg');
    formData.append('file', {
        uri: imageUri.startsWith('file://') ? imageUri : 'file://' + imageUri,
        type: 'image/jpeg',
        name: 'face.jpg',
    } as any);

    const response = await fetch(`${BASE_URL}/system/user/profile/check-face`, {
        method: 'PUT',
        headers: {
            // 'Content-Type': 'multipart/form-data', // 不要手动设置
            'Authorization': 'Bearer ' + token,
            'tenant-id': '1',
        },
        body: formData,
    });
    if (!response.ok) {
        throw new Error('人脸识别失败');
    }
    return response.json();
}

// 查询用户个人信息
export async function getUserProfile(token: string) {
    const res = await fetch(`${BASE_URL}/system/user/profile/get`, {
        method: 'GET',
        headers: {
            'Authorization': 'Bearer ' + token,
        },
    });
    if (!res.ok) throw new Error('网络错误');
    return res.json();
}


// 存储用户健康相关数据，包括体检记录、症状报告、医疗历史等，用于健康分析和医疗服务 VO
export interface DataVO {
    id: number // id
    recordTime: Date // 记录时间
    userId: string // 用户id
    heartRate: number // 心率
    oxygenSaturation: number // 血氧
    systolicPressure: number // 收缩压
    diastolicPressure: number // 舒张压
    vitalCapacity: number // 肺活量
    gripStrength: number // 握力
    breathAlcohol: number // 呼气酒精
    heartAttackIndex: number // 心康指数
    stressIndex: number // 压力指数
    reactionTime: number // 反应时间
    health: number // 健康指数
    mood: number // 情绪指数
    fatigue: number // 疲劳指数
    comprehensive: number // 综合指数
    level: number // 优：X≥85；良：68≤X＜85；差：X＜68，1,2,3
}

// 存储用户健康相关数据，包括体检记录、症状报告、医疗历史等，用于健康分析和医疗服务 API
export const DataApi = {
    // 查询存储用户健康相关数据，包括体检记录、症状报告、医疗历史等，用于健康分析和医疗服务分页
    getDataPage: async (params: any) => {
        return await request.get({url: `/health/data/page`, params})
    },

    // 查询存储用户健康相关数据，包括体检记录、症状报告、医疗历史等，用于健康分析和医疗服务详情
    getData: async (id: number) => {
        return await request.get({url: `/health/data/get?id=` + id})
    },

    // 新增存储用户健康相关数据，包括体检记录、症状报告、医疗历史等，用于健康分析和医疗服务
    createData: async (data: DataVO) => {
        return await request.post({url: `/health/data/create`, data})
    },

    checkedToday: async (userId: string) => {
        return await request.get({url: `/health/data/checked/today?id=` + userId})
    },

    // 修改存储用户健康相关数据，包括体检记录、症状报告、医疗历史等，用于健康分析和医疗服务
    updateData: async (data: DataVO) => {
        return await request.put({url: `/health/data/update`, data})
    },

    // 删除存储用户健康相关数据，包括体检记录、症状报告、医疗历史等，用于健康分析和医疗服务
    deleteData: async (id: number) => {
        return await request.delete({url: `/health/data/delete?id=` + id})
    },

    // 导出存储用户健康相关数据，包括体检记录、症状报告、医疗历史等，用于健康分析和医疗服务 Excel
    exportData: async (params: any) => {
        return await request.download({url: `/health/data/export-excel`, params})
    },
}


// 存储健康指标基准值，上下限通过计算规则动态生成 VO
export interface StandardVO {
    id: number // 主键ID
    recordTime: Date // 基准值生效时间
    heartRate: number // 心率基准值（次/分）
    systolicPressure: number // 收缩压基准值（mmHg）
    diastolicPressure: number // 舒张压基准值（mmHg）
    oxygenSaturation: number // 血氧饱和度基准值（%）
    stress: number // 压力指数基准值（HRV分）
    richSore1: number // 心康指数1
    richSore2: number // 心康指数2
    reactionTime: number // 反应时间基准值（毫秒）
    gripStrength: number // 男性握力基准值（kg）
    vitalCapacity: number // 男性肺活量基准值（mL）
    breathAlcohol: number // 呼气酒精含量基准值（mg/L）
}

// 存储健康指标基准值，上下限通过计算规则动态生成 API
export const StandardApi = {
    // 查询存储健康指标基准值，上下限通过计算规则动态生成分页
    getStandardPage: async (params: any) => {
        return await request.get({url: `/health/standard/page`, params})
    },

    // 查询存储健康指标基准值，上下限通过计算规则动态生成详情
    getStandard: async (id: number) => {
        return await request.get({url: `/health/standard/get?id=` + id})
    },

    // 新增存储健康指标基准值，上下限通过计算规则动态生成
    createStandard: async (data: StandardVO) => {
        return await request.post({url: `/health/standard/create`, data})
    },

    // 修改存储健康指标基准值，上下限通过计算规则动态生成
    updateStandard: async (data: StandardVO) => {
        return await request.put({url: `/health/standard/update`, data})
    },

    // 删除存储健康指标基准值，上下限通过计算规则动态生成
    deleteStandard: async (id: number) => {
        return await request.delete({url: `/health/standard/delete?id=` + id})
    },

    // 导出存储健康指标基准值，上下限通过计算规则动态生成 Excel
    exportStandard: async (params: any) => {
        return await request.download({url: `/health/standard/export-excel`, params})
    },
}
